/***********************************************************/
//模块名称：上传文件模块
//模块说明：1）建立连接
//					2）上传文件
//					3）关闭连接
//作者：严小惠
//日期：2009-10-29
//Copyright (C), 2008-2010 Dnion Tech. Co., Ltd.
/***********************************************************/

#ifndef __PUPFILE_H__
#define __PUPFILE_H__
#include"PublicConfig.h"
#if USE_PUBLIC_PUPFILE
#define USE_PUBLIC_SOCKET 1
#if USE_PUBLIC_SOCKET
#include"PublicTool.h"
#include"PublicSocket.h"
#endif
class PupFile{
#if USE_PUBLIC_SOCKET
    CPublicSocket m_sock;
#endif    
public:
    //声明并定义构造函数
	PupFile(){};
	//声明并定义析构函数
	~PupFile(){};
	//上传的原始函数，共三个
	//// 成功 返回 >0, 失败 返回 -1. 返回值做为pupfile和pbye的第一个参数
	int plogin(const char* strip,int port,const char* user,const char* passwd);
	//关闭    
	void pbye(int fd);
	//上传函数，第2个参数是远程文件名，第3个参数是本地完整路径
	int pupfile(int fd,const char* rpath,const char* lpath,bool bAddIP);
#if 0
	int mypupfile(int fd, const char* rpath,const char* sendbuf,int64_t sendbuflen,bool bAddIP);
	int pupxmlfile(int fd, char* sendbuf, int64_t sendbuflen, char *back);
#endif
protected:
	///filename中若出现@，转义成@A,若出现';'转义成@F,
	void encode_filename(char* buf);	
#if USE_PUBLIC_SOCKET
    int read_line(char* buf,int len,int timeoutms);
#else    
    //建立连接，第1个参数是目标机器地址，第2个参数为目标机器端口号，第3个参数为延时
	int simple_connect(const char* str_ip,int port,int timeoutms);
	//发送，第1个参数是文件描述符，第2个参数为要发送的内容，第3个参数为发送内容的长度，第4个参数为延时
	int write_complete(int fd,const char* buf,int len,int tmo );
	//接收，第1个参数是文件描述符，第2个参数是要接收的内容，第3个参数为接收内容的长度，第4个参数是延时
	int read_line(int fd,char* buf,int len,int timeout);
#endif    
};
#endif
#endif

